using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;

public class LessonMD5 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 MDS码是什么
        //MD5 (Message-Digest Algorithm) 是
        //MD5信息摘要算法的简称
        //它是一种广泛使用的密码散列函数//可以生成出一个128位 (16个字节) 的散列值
        //用于确保信息的完整一致性

        //当我们将数据经过MD5算法计算过后
        //不管我们传入的数据有多大
        //都会生成一个固定长度 (128位共16个字节) 的信息摘要值
        //相同的数据，每次经过MD5算法计算后的结果都会是一样的
        //如果数据变化，MD5码将会发生变化
        //因此，我们可以利用MD5码作为文件的唯一标识//通过它来判断文件内容是否变化
        #endregion

        #region 知识点三 C#中获取文件的MD5码

        //MD5 -- MD5类
        //MD5CryptoServiceProvider - MD5加密服务提供商类

        //老知识
        //Filestream - 文件流 数据持久化四部曲 2进制中讲解过//stringBuilder - 字符串拼接类 C#四部曲C#进阶中讲过
        //流程:
        //1.根据文件路径，获取文件的流信息
        //2.利用md5对象根据流信息 计算出MD5码 (字节数组形式)//3.将字节数组形式的MD5码转为 16进制字符串
        #endregion
        Debug.Log( GetMD5(@"F:\HYBridCLR\AssetBundle\AssetBundleTest\Assets\ArtRes\ab\pc\script"));
    }
    // ftp 和http协议的区别 https://blog.csdn.net/Diligent_wu/article/details/123458009
    private string GetMD5(string filePath){
        //打开一个流文件
        using (FileStream file =new FileStream(filePath,FileMode.Open)) {
            // 声明一个md5对象 用于生成md5码
            MD5 md5 = new MD5CryptoServiceProvider();
            //利用api 得到数据的md5码 16个字节数组
            byte[] md5Info = md5.ComputeHash(file);
            StringBuilder strB = new StringBuilder();
            for (int i = 0; i < md5Info.Length; i++)
            {
                strB.Append(md5Info[i].ToString("x2"));
            }
            return strB.ToString();
        }

    }
    // Update is called once per frame
    void Update()
    {

    }


    //1.在菜单栏添加一个按钮，用于触发该功能
    //2.遍历AB包文件夹，获取所有AB包文件信息
    //程目标
    //3.将AB包的文件名、大小、MD5码 存入 资源对比文件中
    //注意: 该功能只会在Unity编辑器中使用，不会在游戏中使用所以我们可以将代码放入到Editor文件夹中，就不会被打包出去了
}
